package persistencia.busqueda;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import negocio.busqueda.Perfil;
import negocio.cv.ConocimientoIdioma;
import negocio.cv.HerramientaInformatica;
import persistencia.DACBase;
import persistencia.DACNivel;
import persistencia.SingletonDACBase;
import persistencia.cliente.DACHerramientaInformatica;

public class DACHerrInfDelPerfil extends DACBase {
			
	

	private HerramientaInformatica herrInf;
	private List<HerramientaInformatica> herrsInfs;
	private CallableStatement clstm;
	private ResultSet rs;
	
	public DACHerrInfDelPerfil(DACBase dacBase) {
		super(dacBase);
		// TODO Auto-generated constructor stub
	}

	 public void actualizarHerrInfDePerfil(Perfil perfil) {
			 
			List<HerramientaInformatica> hiAmodificar =  
				consultarHerrInfDelPerfil(perfil.getIdPerfil());
			
			try{							
				for (HerramientaInformatica  hi : perfil.getHerramientasInformaticas()) {
									
					clstm = getConn().prepareCall("{call save_herramietainformaticaxperfil(?,?,?)}");
					
					clstm.setInt("idperfil", perfil.getIdPerfil());
					clstm.setInt("idnivel", hi.getNivel().getIdNivel());	
					clstm.setInt("idherramientainformatica", hi.getIdHerramientaInformatica());
													
					clstm.execute();
					
					if(hiAmodificar.indexOf(hi) != -1){
						hiAmodificar.remove(hi);						
					}
				}
				
				for (HerramientaInformatica  hi : hiAmodificar) {
					eliminarHerramientaInformatica(hi, perfil.getIdPerfil());
				}
				  
				if(clstm != null)
					clstm.close();
		        clstm = null;
		         
		        	            
		        
			}
			
			catch (SQLException ex) {
			    // handle any errors			
			    System.out.println("SQLException: " + ex.getMessage());
			    System.out.println("SQLState: " + ex.getSQLState());
			    System.out.println("VendorError: " + ex.getErrorCode());
			    System.out.println("Error en metodo altaHerrInfDePerfil_DACHerrInfDelPerfil");
			}
		}
	 
	 public void eliminarHerramientaInformatica(HerramientaInformatica hi, int idPerfil) {
		 try{								
				clstm = getConn().prepareCall("{call delete_herramientainformaticaxperfil(?,?)}");					
				clstm.setInt("par_idperfil", idPerfil);
				clstm.setInt("par_idherramientainformatica", hi.getIdHerramientaInformatica());													
				clstm.execute();
				if(clstm != null)
					clstm.close();
		        clstm = null;
		         
		               	            
		        
			}
			
			catch (SQLException ex) {
			    // handle any errors			
			    System.out.println("SQLException: " + ex.getMessage());
			    System.out.println("SQLState: " + ex.getSQLState());
			    System.out.println("VendorError: " + ex.getErrorCode());
			    System.out.println("Error en metodo eliminarHerrInfDePerfil_DACHerrInfDelPerfil");
			}
	 }
	 
	 public List<HerramientaInformatica> consultarHerrInfDelPerfil(int idPerfil) {
		 try{
				herrsInfs = new ArrayList<HerramientaInformatica>();
				clstm = getConn().prepareCall("{call herramietainformaticaxperfilConsultar(?)}");
				clstm.setInt("idperfil", idPerfil);			
				clstm.execute();
				rs = clstm.getResultSet();		
				
				while (rs.next()) {
					
					herrInf = new HerramientaInformatica();			
					
					DACHerramientaInformatica dacHI = new DACHerramientaInformatica(SingletonDACBase.tomarDACBase());
					
					herrInf = dacHI.consultarHerramientaInformatica(rs.getInt("idherramientainformatica")); 
					
					DACNivel dacNivel = new DACNivel(SingletonDACBase.tomarDACBase());
					
					herrInf.setNivel(dacNivel.consultarNivel(rs.getInt("idnivel")));
					
					herrsInfs.add(herrInf);					
					
				}			           
		
				rs.close();
				rs = null;
				clstm.close();
		        clstm = null;
		        
		       
		        
			}   
			
			catch (SQLException ex) {
			    // handle any errors			
			    System.out.println("SQLException: " + ex.getMessage());
			    System.out.println("SQLState: " + ex.getSQLState());
			    System.out.println("VendorError: " + ex.getErrorCode());
			    System.out.println("Error en metodo consultarHerrInfDelPerfil_DacHerrInfDelPErfil");
			}	
			return herrsInfs ;
		
	 }
}
